Software estimation, which can include cost estimation, quality estimation, size estimation, or investment risk estimation, for example, is a major issue in software project management faced by many organizations. In this regard, there is a need for software estimation models that will facilitate effective monitoring, control, and assessment of software development projects.
However, achieving accurate software estimation is inherently a daunting task. The software estimation problem is highly complex, particularly since the relationships between software output metrics and contributing factors generally exhibit strong, complex, non-linear characteristics. Accurate software estimation also typically requires the consideration of many factors, some of which can be difficult to quantify. Prior art approaches used to solve this problem have not been widely successful in effectively and consistently predicting software output metrics.
One example of a well-known software cost estimation model is the Constructive Cost Model (COCOMO), which integrates expert knowledge. This model is considered to be generally simple, in that it does not require the use of complex mathematics in the estimation process. However, it is also one example of several known models that rely heavily on the availability of sufficient historical project data to be effectively employed, which is not always readily available.
More recently, techniques based on artificial neural networks have been applied to solve the software estimation problem. However, such techniques have not been widely accepted by software engineering practitioners. While artificial neural networks (ANNs) have the ability to model complex, non-linear relationships, and are capable of approximating measurable functions through learning, ANNs generally operate as “black boxes”. Accordingly, known ANN-based models do not provide an explicit explanation of how results are obtained. This lack of transparency may be one of the primary reasons that such techniques have not gained wide acceptance among software engineering practitioners.
Fuzzy logic techniques have been applied to software estimation problems to a limited extent. Fuzzy logic can be a powerful technique used to solve real world applications with imprecise and uncertain information, and in dealing with semantic knowledge. It is also generally easily understood and interpreted. However, fuzzy-logic based models traditionally do not have learning ability, and the quality of the results obtained when applied to software estimation problems have not, in general, compared favorably to results obtained from applications of more conventional models, such as COCOMO.